package org.zjt.collections;

import lombok.Builder;
import lombok.Data;

import java.io.Serializable;
import java.util.*;

/**
 * Description:
 *
 *  当集合中的元素需要排序场景：
 *          1、自排序集合（SortedMap 、 SortedSet）
 *          2、Collections.sort
 *
 *
 *
 *  实现集合排序的要求（或关系）：
 *
 *          1、element comparable 【集合中的实例必须是comparable[可排序的]。】
 *          2、collection comparator  【集合中有自己的一个排序器】
 *
 *
 * @author juntao.zhang
 * Date: 2018-06-05 下午2:07
 * @see
 */
public class SortTest implements Serializable{



    public static void main(String[] args) {


        Set<SortableNode> sortableNodeSet = new TreeSet<>();
        sortableNodeSet.add(SortableNode.builder().value(11).build());


        List<SortableNode> unSortableNodes = Arrays.asList(SortableNode.builder().value(2).build());
        Collections.sort(unSortableNodes);


        Set<UnSortableNode> selfSortableNodeSet = new TreeSet<>(Comparator.comparingInt(UnSortableNode::getValue));
        selfSortableNodeSet.add(UnSortableNode.builder().value(22).build());


    }

}

@Data
@Builder
class SortableNode implements Comparable<SortableNode>{

    private Integer value;

    @Override
    public int compareTo(SortableNode o) {
        SortableNode sortableNode =  o;
        return Integer.compare(this.value,sortableNode.value);
    }
}


@Data
@Builder
class UnSortableNode {

    private Integer value;

}
